Cloud BuildのビルドログをCloud Storageの指定バケットに保存してみた
データアナリティクス事業本部の根本です。Cloud Buildトリガーを作成するときに、ビルドのログ出力先はあまり気にしていませんでした。リファレンスをよく見ると、指定バケットにも出せる機能があることを知ったので試してみました。
この記事の対象者
- Cloud Buildでログ出力先を指定バケットにしたいひと
前提条件
- Cloud Build,Cloud Storage APIが使えること、Cloud BuildとGitgHubリポジトリが連携していること
検証の全体像
- Cloud Buildトリガーを作成して動かしてみて、ビルドログが指定のCloud Storageバケットに保存されるか確認する
以下のようなイメージです。
やってみる
Cloud Buildのログ設定に関して確認する
Cloud Buildでトリガー作成する際に、Cloud Build構成ファイル(cloudbuild.yamlのような)を作成しますが、この構成ファイル内でlogging
設定が可能です。以下に設定可能オプションをリファレンスをもとに記載しました。
設定値 | 概要 |
---|---|
LOGGING_UNSPECIFIED | ログ設定を省略した場合。デフォルトはLEGACYとなるが将来動作が変更される可能性もあるとのこと(※注) |
LEGACY | Cloud LoggingとCloud Storageに保存 |
GCS_ONLY | Cloud Storageに保存 |
STACKDRIVER_ONLY | 非推奨。CLOUD_LOGGING_ONLYと同じとのこと |
CLOUD_LOGGING_ONLY | Cloud Loggingに保存。ログのストリーミングはされない |
NONE | ログを保存しない |
※注
The service determines the logging mode. The default is LEGACY. Do not rely on the default logging behavior as it may change in the future.
引用:公式リファレンス
今回は、上記のオプションの中でもGCS_ONLY
を設定して指定のCloud Storageバケットへログが出力されるようにしてみます。
Cloud Build構成ファイルの準備
以下のBuild構成ファイルを作成しました。トリガー作成に関してはこちらの記事をご参照ください。
steps: - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: 'bash' args: - '-c' - | echo "Hello Cloud Build!" logsBucket: 'gs://バケット名' options: logging: GCS_ONLY
とても簡素なBuild構成ファイルで、実行するとログにHello Cloud Build!
と出力されます。リソース作成などはしません。
大事なところを説明しますと、
logsBucket
にてログを保存するバケットを指定します。
options
はCloud Storageのみにログ保存するのでGCS_ONLY
を指定します。
上記のビルド構成ファイルをGitHUBリポジトリにPUSHして、トリガーを起動します。注意点として、ビルドトリガーに設定しているサービスアカウントにストレージ管理者ロール
が付与されていないと、Cloud Buildトリガーが起動に失敗してしまい、以下のメッセージが画面に出力されます。
ビルドを実行できませんでした: invalid bucket "バケット名"; default Cloud Build service account or user-specified service account does not have access to the bucket
Build構成ファイルの準備ができたらトリガーを実行しましょう!
トリガー実行してみる
トリガーを実行したら、ログを確認してみます。
無事ログが出ていました。
下の方にこっそりとHello Cloud Build
しているのが確認できました。
今回初めてCloud Storageのみにログ記録、という設定にしてみたのですが、ログ内容は同じでも表示のレイアウトがCloud Loggingだけにした場合とで異なっているなと感じました。せっかくなので比較してみます。
画像左はCloud Storage、右はCloud Loggingです。右側、Cloud Loggingの方は、当たり前ですがCloud Loggingそのものですよね。
左のCloud Storageの方は、テキストデータをそのまま出力したようなログになっています。
それではCloud Storageにログファイルが出力されているかと、その中身も見てみます。
Cloud Storageのバケットにログファイルが出力されていました。以下が内容抜粋です。
00826eea143f: Pull complete 1da149176f2b: Verifying Checksum 1da149176f2b: Download complete d4c3349d0186: Pull complete 487266b545b9: Pull complete 5971bf96c54f: Verifying Checksum 5971bf96c54f: Download complete 5971bf96c54f: Pull complete 1da149176f2b: Pull complete 4a81acf976a0: Pull complete Digest: sha256:d136dc36b6703c25755706eb7e2bc1eaf18d16963f72b48197cd3f1e7727a411 Status: Downloaded newer image for gcr.io/google.com/cloudsdktool/cloud-sdk:latest gcr.io/google.com/cloudsdktool/cloud-sdk:latest Hello Cloud Build! PUSH DONE
当然ですが、テキストファイルの内容はCloud Buildのログ画面で確認した内容と同一でした。
Cloud Buildのログ確認画面でCloud Storageのみにログ記録した方は、ログのテキストファイルをそのまま画面に表示しただけのように見えます。ログの行ごとのタイムスタンプもついていませんでした。てっきりどちらのオプションもログを画面で見た時の見た目は変わらないと思っていたので意外でした。
とりあえず、今回の検証目的である指定バケットへのログの出力が確認できたのでよしとします。
おわりに
今までCloud Buildのログ出力先を意識していなかったのですが、調べてやってみると意外と違いや注意点もあるものだなと思いました。これからビルド構成ファイルにログ出力設定をするときはワークロードを踏まえ最適なオプションを選びたいと思います。この記事がどなたかのお役に立てば幸いです。それではまた。